﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _10_Template
{
    class Program
    {
        /*
         模板模式： 当需要完成在某一细节层次一致的一个过程或一系列步骤，但其个别的步骤在更详细的层次
         上实现可能不同时，可以使用模板方法模式处理

         定义一个操作中的算法的骨架，而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构
         即可重定义该算法的某些特定步骤。

         模板方法模式 吧不变的行为职责搬移到父类，去除子类中的重复代码 来体现他的优势。
         模板方法模式 就是提供了一个代码复用的平台。
         当不变的和可变的行为在子类的实现中混合在一起的时候，就可以通过模版方法模式将不变的行为抽离出来。
             */
        static void Main(string[] args)
        {
            AbstractClass template1 = new ConcreteClass1();
            template1.TemplateMethod();
            template1 = new ConcreteClass2();
            template1.TemplateMethod();
            Console.Read();
        }
    }
}
